home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung CD 2 (Tewi)(1994).iso / c / compiler / cpp / cppdef.h < prev    next >
C/C++ Source or Header  |  1985-12-03  |  13KB  |  439 lines

  1.  
  2. /*
  3.  *                 S y s t e m   D e p e n d e n t
  4.  *              D e f i n i t i o n s    f o r   C P P
  5.  *
  6.  * Definitions in this file may be edited to configure CPP for particular
  7.  * host operating systems and target configurations.
  8.  *
  9.  * NOTE: cpp assumes it is compiled by a compiler that supports macros
  10.  * with arguments.  If this is not the case (as for Decus C), #define
  11.  * nomacarg -- and provide function equivalents for all macros.
  12.  *
  13.  * cpp also assumes the host and target implement the Ascii character set.
  14.  * If this is not the case, you will have to do some editing here and there.
  15.  */
  16.  
  17. /*
  18.  * This redundant definition of TRUE and FALSE works around
  19.  * a limitation of Decus C.
  20.  */
  21. #ifndef TRUE
  22. #define TRUE                    1
  23. #define FALSE                   0
  24. #endif
  25.  
  26. /*
  27.  * Define the HOST operating system.  This is needed so that
  28.  * cpp can use appropriate filename conventions.
  29.  */
  30. #define SYS_UNKNOWN             0
  31. #define SYS_UNIX                1
  32. #define SYS_VMS                 2
  33. #define SYS_RSX                 3
  34. #define SYS_RT11                4
  35. #define SYS_LATTICE             5
  36. #define SYS_ONYX                6
  37. #define SYS_68000               7
  38. #define    SYS_MSDOS        8
  39.  
  40. #ifndef HOST
  41. #ifdef  unix
  42. #define HOST                    SYS_UNIX
  43. #else
  44. #ifdef  vms
  45. #define HOST                    SYS_VMS
  46. #else
  47. #ifdef  rsx
  48. #define HOST                    SYS_RSX
  49. #else
  50. #ifdef  rt11
  51. #define HOST                    SYS_RT11
  52. #else
  53. #ifdef    MSDOS
  54. #define    HOST            SYS_MSDOS
  55. #endif
  56. #endif
  57. #endif
  58. #endif
  59. #endif
  60. #endif
  61.  
  62. #ifndef HOST
  63. #define HOST                    SYS_UNKNOWN
  64. #endif
  65.  
  66. /*
  67.  * We assume that the target is the same as the host system
  68.  */
  69. #ifndef TARGET
  70. #define TARGET                  HOST
  71. #endif
  72.  
  73. /*
  74.  * In order to predefine machine-dependent constants,
  75.  * several strings are defined here:
  76.  *
  77.  * MACHINE      defines the target cpu (by name)
  78.  * SYSTEM       defines the target operating system
  79.  * COMPILER     defines the target compiler
  80.  *
  81.  *      The above may be #defined as "" if they are not wanted.
  82.  *      They should not be #defined as NULL.
  83.  *
  84.  * LINE_PREFIX  defines the # output line prefix, if not "line"
  85.  *              This should be defined as "" if cpp is to replace
  86.  *              the "standard" C pre-processor.
  87.  *
  88.  * FILE_LOCAL   marks functions which are referenced only in the
  89.  *              file they reside.  Some C compilers allow these
  90.  *              to be marked "static" even though they are referenced
  91.  *              by "extern" statements elsewhere.
  92.  *
  93.  * OK_DOLLAR    Should be set TRUE if $ is a valid alphabetic character
  94.  *              in identifiers (default), or zero if $ is invalid.
  95.  *              Default is TRUE.
  96.  *
  97.  * OK_CONCAT    Should be set as follows:
  98.  *              CON_FALSE       ## has no significance to cpp (needed for
  99.  *                              systems that have to preprocess asm source).
  100.  *              CON_NOEXPAND    ## concatenates tokens per the Draft Standard.
  101.  *                              The concatenated token is not macro-expanded.
  102.  *              CON_EXPAND      ## concatenates tokens per the Draft Standard.
  103.  *                              The concatenated token is macro-expanded.
  104.  *
  105.  * OK_DATE      Predefines the compilation date if set TRUE.
  106.  *              Not permitted by the Nov. 12, 1984 Draft Standard.
  107.  *
  108.  * OK_IF_JUNK   Should be set TRUE to allow text after #else and
  109.  *              #endif.  This is needed for compatiblity with old
  110.  *              preprocessors, but is forbidden by the Draft Standard.
  111.  *
  112.  * OK_TRIGRAPH  Enable trigraph substitution, whereby ??= -> # etc.
  113.  * TFLAG_INIT   Initial value for the -t option.  If TRUE, -t
  114.  *              disables trigraphs, if FALSE, -t enables them.
  115.  *
  116.  * OLD_PREPROCESSOR Forces several parameters to a state consistant
  117.  *              with the Reiser cpp preprocessor.
  118.  * S_CHAR etc.  Define the sizeof the basic TARGET machine word types.
  119.  *              By default, sizes are set to the values for the HOST
  120.  *              computer.  If this is inappropriate, see the code in
  121.  *              cpp3.c for details on what to change.  Also, if you
  122.  *              have a machine where sizeof (signed int) differs from
  123.  *              sizeof (unsigned int), you will have to edit code and
  124.  *              tables in cpp3.c (and extend the -S option definition.)
  125.  *
  126.  * CPP_LIBRARY  May be defined if you have a site-specific include directory
  127.  *              which is to be searched *before* the operating-system
  128.  *              specific directories.
  129.  */
  130.  
  131. #if TARGET == SYS_MSDOS
  132. /*
  133.  *     Here we assume that the operating system is MS-DOS and the
  134.  * target processor is an Intel 8086.   I8086 and MSDOS are defined
  135.  * as they would be with the Lattice or Microsoft (3.x) preprocessor.
  136.  *
  137.  *     The memory-model-specific defines are all predefined here and
  138.  * must be undefined later when the memory model is actually chosen,
  139.  * for example when the '-M' option is processed...
  140.  */
  141.  
  142. #define    MACHINE            "I8086", "LPTR", "SPTR", "I8086S",    \
  143.                 "I8086P", "I8086D", "I8086L",        \
  144.                 "M_I86", "M_I86SM", "M_I86MM", "M_I86LM"
  145.  
  146. #define    SYSTEM            "MSDOS"
  147.  
  148. #endif
  149.  
  150. #if TARGET == SYS_LATTICE
  151. /*
  152.  * We assume the operating system is pcdos for the IBM-PC.
  153.  * We also assume the small model (just like the PDP-11)
  154.  */
  155. #define MACHINE                 "i8086"
  156. #define SYSTEM                  "pcdos"
  157. #endif
  158.  
  159. #if TARGET == SYS_ONYX
  160. #define MACHINE                 "z8000"
  161. #define SYSTEM                  "unix"
  162. #endif
  163.  
  164. #if TARGET == SYS_VMS
  165. #define MACHINE                 "vax"
  166. #define SYSTEM                  "vms"
  167. #define COMPILER                "vax11c"
  168. #endif
  169.  
  170. #if TARGET == SYS_RSX
  171. #define MACHINE                 "pdp11"
  172. #define SYSTEM                  "rsx"
  173. #define COMPILER                "decus"
  174. #endif
  175.  
  176. #if TARGET == SYS_RT11
  177. #define MACHINE                 "pdp11"
  178. #define SYSTEM                  "rt11"
  179. #define COMPILER                "decus"
  180. #endif
  181.  
  182. #if TARGET == SYS_68000
  183. /*
  184.  * All these machine designators have been seen in various systems.
  185.  * Warning -- compilers differ as to sizeof (int).  cpp3 assumes that
  186.  * sizeof (int) == 2
  187.  */
  188. #define MACHINE                 "M68000", "m68000", "m68k", "mc68000"
  189. #define SYSTEM                  "unix"
  190. #endif
  191.  
  192. #if     TARGET == SYS_UNIX
  193. #define SYSTEM                  "unix"
  194. #ifdef  pdp11
  195. #define MACHINE                 "pdp11"
  196. #endif
  197. #ifdef  vax
  198. #define MACHINE                 "vax"
  199. #endif
  200. #endif
  201.  
  202. /*
  203.  * defaults
  204.  */
  205.  
  206. #ifndef MSG_PREFIX
  207. #define MSG_PREFIX              "cpp: "
  208. #endif
  209.  
  210. #ifndef LINE_PREFIX
  211. #ifdef  decus
  212. #define LINE_PREFIX             ""
  213. #else
  214. #define LINE_PREFIX             "line"
  215. #endif
  216. #endif
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240. /*
  241.  * OLD_PREPROCESSOR forces the definition of several compilation
  242.  * options to values compatible with the Reiser preprocessor.
  243.  */
  244.  
  245. #ifndef OLD_PREPROCESSOR
  246. #define OLD_PREPROCESSOR        FALSE
  247. #endif
  248.  
  249. #if     OLD_PREPROCESSOR
  250. #define OK_DOLLAR               FALSE
  251. #define OK_CONCAT               CON_FALSE
  252. #define OK_IF_JUNK              TRUE
  253. #define COMMENT_INVISIBLE       TRUE
  254. #define STRING_FORMAL           TRUE
  255. #define OK_TRIGRAPH             FALSE
  256. #endif
  257.  
  258. /*
  259.  * RECURSION_LIMIT may be set to -1 to disable the macro recursion test.
  260.  */
  261. #ifndef RECURSION_LIMIT
  262. #define RECURSION_LIMIT 1000
  263. #endif
  264.  
  265. /*
  266.  * BITS_CHAR may be defined to set the number of bits per character.
  267.  * it is needed only for multi-byte character constants.
  268.  */
  269. #ifndef BITS_CHAR
  270. #define BITS_CHAR               8
  271. #endif
  272.  
  273. /*
  274.  * BIG_ENDIAN is set TRUE on machines (such as the IBM 360 series)
  275.  * where 'ab' stores 'a' in the high-bits and 'b' in the low-bits.
  276.  * It is set FALSE on machines (such as the PDP-11 and Vax-11)
  277.  * where 'ab' stores 'a' in the low-bits and 'b' in the high-bits.
  278.  * (Or is it the other way around?) -- Warning: BIG_ENDIAN code is untested.
  279.  */
  280. #ifndef BIG_ENDIAN
  281. #define BIG_ENDIAN              FALSE
  282. #endif
  283.  
  284. /*
  285.  * COMMENT_INVISIBLE may be defined to allow "old-style" comment
  286.  * processing, whereby the comment becomes a zero-length token
  287.  * delimiter.  This permitted tokens to be concatenated in macro
  288.  * expansions.  This was removed from the Draft Ansi Standard.
  289.  */
  290. #ifndef COMMENT_INVISIBLE
  291. #define COMMENT_INVISIBLE       FALSE
  292. #endif
  293.  
  294. /*
  295.  * STRING_FORMAL may be defined to allow recognition of macro parameters
  296.  * anywhere in replacement strings.  This was removed from the Draft Ansi
  297.  * Standard and a limited recognition capability added.
  298.  *
  299.  * Note: some preliminary code has been commented out by
  300.  * statements of the form #if 0 && STRING_FORMAL.  This
  301.  * is for maintenence reasons only: see comments in cpp4.c
  302.  */
  303. #ifndef STRING_FORMAL
  304. #define STRING_FORMAL           FALSE
  305. #endif
  306.  
  307. /*
  308.  * OK_DOLLAR enables use of $ as a valid "letter" in identifiers.
  309.  * This is a permitted extension to the Ansi Standard and is required
  310.  * for e.g., VMS, RSX-11M, etc.   It should be set FALSE if cpp is
  311.  * used to preprocess assembler source on Unix systems.  OLD_PREPROCESSOR
  312.  * sets OK_DOLLAR FALSE for that reason.
  313.  */
  314. #ifndef OK_DOLLAR
  315. #define OK_DOLLAR               TRUE
  316. #endif
  317.  
  318. /*
  319.  * OK_CONCAT enables (one possible implementation of) token concatenation.
  320.  * If cpp is used to preprocess Unix assembler source, this should be
  321.  * set 0 as the concatenation character, #, is used by the assembler.
  322.  */
  323. #define CON_FALSE               0
  324. #define CON_NOEXPAND            1
  325. #define CON_EXPAND              2
  326. #ifndef OK_CONCAT
  327. #define OK_CONCAT               CON_NOEXPAND
  328. #endif
  329.  
  330. /*
  331.  * OK_IF_JUNK permits commentary after #else and #endif statements.
  332.  */
  333. #ifndef OK_IF_JUNK
  334. #define OK_IF_JUNK      FALSE
  335. #endif
  336.  
  337. /*
  338.  * OK_DATE may be enabled to predefine today's date as a string
  339.  * at the start of each compilation.  This is apparently not permitted
  340.  * by the Draft Ansi Standard.
  341.  */
  342. #ifndef OK_DATE
  343. #define OK_DATE         TRUE
  344. #endif
  345.  
  346. /*
  347.  * OK_TRIGRAPH permits replacement of ??<something> on input text
  348.  * as per the Draft Standard.  TFLAG_INIT is the initial state
  349.  * of the trigraph substitution compiler option.
  350.  */
  351. #ifndef OK_TRIGRAPH
  352. #define OK_TRIGRAPH     TRUE
  353. #endif
  354. #ifndef TFLAG_INIT
  355. #define TFLAG_INIT      TRUE
  356. #endif
  357.  
  358.  
  359.  
  360. /*
  361.  * Some common definitions.
  362.  */
  363.  
  364. #ifndef DEBUG
  365. #define DEBUG                   TRUE                    /* Temp */
  366. #endif
  367.  
  368. /*
  369.  * The following definitions are used to allocate memory for
  370.  * work buffers.  In general, they should not be modified
  371.  * by implementors.
  372.  *
  373.  * NMACPARS     The maximum number of #define parameters (31 per Standard)
  374.  *              NOTE: (NMACPARS * 2) must be <= 255.
  375.  * IDMAX        The longest identifier, 31 per Ansi Standard
  376.  * NBUFF        Input buffer size
  377.  * NWORK        Work buffer size -- the longest macro
  378.  *              must fit here after expansion.
  379.  * NEXP         The nesting depth of #if expressions
  380.  * NINCLUDE     The number of directories that may be specified
  381.  *              on a per-system basis, or by the -I option.
  382.  * BLK_NEST     The number of nested #if's permitted.
  383.  */
  384.  
  385. #define IDMAX                    31
  386. #define NMACPARS                 31
  387. #define NBUFF                   512
  388. #define NWORK                   512
  389. #define NEXP                    128
  390. #define NINCLUDE                  7
  391. #define NPARMWORK               (NWORK * 2)
  392. #define BLK_NEST                32
  393.  
  394. /*
  395.  * Some special constants.  These may need to be changed if cpp
  396.  * is ported to a wierd machine.
  397.  *
  398.  * NOTE: if cpp is run on a non-ascii machine, ALERT and VT may
  399.  * need to be changed.  They are used to implement the proposed
  400.  * ANSI standard C control characters '\a' and '\v' only.
  401.  * DEL is used to tag macro tokens to prevent #define foo foo
  402.  * from looping.  Note that we don't try to prevent more elaborate
  403.  * #define loops from occurring.
  404.  */
  405.  
  406. #ifndef ALERT
  407. #define ALERT                   '\007'          /* '\a' is "Bell"       */
  408. #endif
  409.  
  410. #ifndef VT
  411. #define VT                      '\013'          /* Vertical Tab CTRL/K  */
  412. #endif
  413.  
  414.  
  415. #ifndef FILE_LOCAL
  416. #ifdef  decus
  417. #define FILE_LOCAL              static
  418. #else
  419. #ifdef  vax11c
  420. #define FILE_LOCAL              static
  421. #else
  422. #define FILE_LOCAL                              /* Others are global    */
  423. #endif
  424. #endif
  425. #endif
  426.  
  427.  
  428. /* ms_dos_model
  429. **
  430. **        Used to indicate to the main() routine what memory model
  431. **     has been chosen.   Main uses this information to determine what
  432. **    predefined strings should be deleted.
  433. */
  434.  
  435. #if    HOST == SYS_MSDOS
  436. extern char ms_dos_model;
  437. #endif
  438.  
  439.